一文了解数据库和数据仓库
一、数据库的诞生背景
互联网已经高速发展了很多年,各大企业都根据自己的业务搭建了自己的门户网站,拥有自己的服务器,以及自己的用户。用户在对企业的服务进行交互访问时,用户给企业反馈的信息去哪里了?比如说我们最常见的注册信息,企业给到我们的资源从哪里来的?比如说最常见的商品列表。其实这些数据都存放在企业级的数据库当中,离开了数据库,在优秀的架构设计,在优秀的代码都是没有灵魂的。目前企业主流的数据一般分为关系型数据库和非关系型数据库,常见的关系型数据库:mysql,oracle,sqlserver等,常见的非关系型数据库:redis,hbase,mongodb等。数据库的存在,其主要作用是满足在用户和企业服务交互时,满足低时延的增删改查操作。
二、数据仓库的诞生背景
大数据,数据赋能这些词近些年来在it圈子火起来了。其实大数据的概念很早就有人提出来了,很早就有人发现,数据会说话,但是由于当时的计算机的硬件条件限制,处理海量数据的框架也不成熟,数据的发展受到限制。近几年迎来了hadoop时代,以及伴随着整个hadoop生态圈其它框架的发展,包括离线的和实时的,让更多的企业可以用廉价的机器进行横向扩展来满足海量数据的计算要求,优秀的开源框架可以让企业以更少的人力成本高效管理和使用数据。海量数据想要真正使用起来,能让其给企业带来收益,我们就需要给数据制定规范,这时数据仓库就诞生了。
三、数据仓库的建设意义
企业要建立自己的数据仓库和数据集市,一般来讲最主要的目的是为了给上层数据应用产品提供强有力的数据支撑。当然对一个是否合理的数据仓库检验的标准不外乎以下这几点:
性能
一个良好的数据仓库能够帮助我们快速查询所需要的数据,减少数据的I/O成本。可能对于刚入数据仓库这行的人来说,这点有点难以理解,所以加以解释:之前提到过数据仓库是支撑上层BI应用的,这些应用可能涵盖了成百上千的指标,那么我们在对这些指标进行ETL的时候,如果都从最原始的数据去加工(即从生产系统同步过来的ods层数据),那么这个加工逻辑是非常复杂的,难以维护,肯定是存在计算逻辑重复,那么我们要改善这一点,在数据仓库里面其实就是建立数据模型,进行分层,将共有逻辑进行抽象下沉(非本文重点),这样就可以避免计算重复的逻辑,即减少数据的I/O成本。成本
在数据仓库的世界里,成本不外乎计算成本,存储成本,一个好的数据仓库模型,即能满足低计算成本的前提下,减少不必要的数据冗余带来的存储开销,不必要这个词很关键,并不是说完全不冗余,合理的冗余可以带来较好的计算速率,比如说退化纬度,整合多个事务过程的大宽表等等。效率
良好的数据模型能极大的改善用户使用数据的体验,提高使用数据的效率。一个优秀的数据仓库模型设计,对于上层用户可以将ods,dwd,dws层都黑盒封装起来,暴露出ads层(应用数据层)的数据给用户使用,用户不用在乎底层数据的实现,这样就可以屏蔽了底层复杂的逻辑,让上层用户方便使用。质量
良好的数据模型能改善数据统计口径不一致的问题,减少数据数据计算错误的可能性。
四、如何建设数据仓库
大概仓库模型见下图:
需求调研-》业务调研-》划分业务域-》构建指标体系-》加工dim层-》ods层-》dwd层-》dws层-》ads层(数据集市),以上非本文重点,简要描述下分层模型。
DIM层
确定主纬表
确定从纬表
确定纬度表属性
规范化和反规范化
特殊纬度和事实性纬度的处理
ODS层
1.数据缺失
2.数据不准确(与线上业务系统不匹配)
3.字段命名应该达到统一规范定义(多业务线为了满足自身的需求,往往很难做到命名统一)
4.字段类型的规范统一
5.度量单位的统一
6.应该将每个字段都写上注释,特别是带有枚举的字段
7.库表名的命名要规范,每个企业可能都不太一样,但是要做到见名知意
DWD层
DWS层
ADS层
文章不错?点个【在看】吧! 👇